libostree: Fix ostree_deployment_clone() to also clone bootconfig
authorColin Walters <walters@verbum.org>
Mon, 17 Mar 2014 23:21:39 +0000 (19:21 -0400)
committerColin Walters <walters@verbum.org>
Wed, 19 Mar 2014 13:49:55 +0000 (09:49 -0400)
This way one can easily mutate it for a new deployment list.

src/libostree/ostree-deployment.c

index a555e05660b6d7eb43036f480a8776282e9658c6..4533715c2fa2c9130a634db2c87036c5797082b6 100644 (file)
@@ -138,11 +138,30 @@ ostree_deployment_set_origin (OstreeDeployment *self, GKeyFile *origin)
 OstreeDeployment *
 ostree_deployment_clone (OstreeDeployment *self)
 {
+  gs_unref_object OstreeBootconfigParser *new_bootconfig = NULL;
+  GKeyFile *new_origin = NULL;
   OstreeDeployment *ret = ostree_deployment_new (self->index, self->osname, self->csum,
-                                         self->deployserial,
-                                         self->bootcsum, self->bootserial);
-  ostree_deployment_set_bootconfig (ret, self->bootconfig);
-  ostree_deployment_set_origin (ret, self->origin);
+                                                 self->deployserial,
+                                                 self->bootcsum, self->bootserial);
+
+  new_bootconfig = ostree_bootconfig_parser_clone (self->bootconfig);
+  ostree_deployment_set_bootconfig (ret, new_bootconfig);
+
+  if (self->origin)
+    {
+      gs_free char *data = NULL;
+      gsize len;
+      gboolean success;
+
+      data = g_key_file_to_data (self->origin, &len, NULL);
+      g_assert (data);
+
+      new_origin = g_key_file_new ();
+      success = g_key_file_load_from_data (new_origin, data, len, 0, NULL);
+      g_assert (success);
+      
+      ostree_deployment_set_origin (ret, new_origin);
+    }
   return ret;
 }